import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_kit_plus/flutter_kit.dart';
import 'package:provider/provider.dart';

import '../model/model.dart';
import 'bluetooth/send_data.dart';
import 'home_controller.dart';
import 'log.dart';
import 'notify/notifier_state.dart';
import 'tool/assets.dart';

/// 设置与原生一致的路径
late final platform;
const isDebugLog = false;
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
late final signManager;
late final passManager;
late final passTypeManager;
late final chManager;
late final globalManager;
late final volumeManager;
Future<void> main() async {
  /// 捕获所有未捕获的 Dart 异常
  LogManager.initFireBase(runMain: () async {
    BluetoothManager.instance.requestPermissions();
    platform = const MethodChannel('com.dsp18/file');
    SendData.init();
    configLoading();
    initRealm();
    runApp(
      MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (context) => DeviceConnectStateNotifier()),
          ChangeNotifierProvider(create: (context) => GlobalModelNotifier()),
          ChangeNotifierProvider(create: (context) => LogNotifier()),
        ],
        child: const MyApp(),
      ),
    );
  });
}

void initRealm() {
  // 创建不同模型的 RealmManager 实例
  RealmManager.schemaVersion = 1;
  // // 创建不同模型的 RealmManager 实例
  RealmManager.schemaVersion = 9;
  RealmManager<GlobalModel>(
    allSchemas: [SignModel.schema, PassType.schema, Passmodel.schema, ChannelModel.schema, GlobalModel.schema],
  );
}

// ///权限请求
// Future<void> requestPermissions() async {
//   await Permission.bluetooth.request();
//   await Permission.bluetoothScan.request();
//   await Permission.bluetoothConnect.request();
//   await Permission.bluetoothAdvertise.request();
//   // await Permission.nearbyWifiDevices.request();
//   //FlutterBluePlus.setLogLevel(LogLevel.verbose, color: true);
// }

///设置吐司的颜色
void configLoading() {
  EasyLoading.instance
    ..displayDuration = const Duration(milliseconds: 2000) // 设置提示框显示的时长，默认是 2000 毫秒（2 秒）
    ..indicatorType = EasyLoadingIndicatorType.fadingCircle // 设置加载指示器的类型，这里使用的是淡入淡出的圆形
    ..loadingStyle = EasyLoadingStyle.custom // 使用自定义样式，以便可以手动设置颜色等属性
    ..indicatorSize = 45.0 // 设置加载指示器的大小，单位是像素
    ..radius = 10.0 // 设置加载框的圆角半径，单位是像素
    ..progressColor = Colors.white // 设置进度条或指示器的颜色，
    ..backgroundColor = Colors.black // 设置加载框的背景颜色，
    ..indicatorColor = Colors.white // 设置指示器的颜色，，与 progressColor 一致
    ..textColor = Colors.white // 设置加载框中提示文字的颜色，
    ..maskColor = Color_bg_btn.withOpacity(0.5) // 设置背景遮罩颜色，这里设置为半透明的蓝色
    ..userInteractions = false // 设置在加载框显示时，用户是否可以与其他 UI 交互，这里设置为不可以（禁用用户交互）
    ..dismissOnTap = false; // 设置点击加载框时是否关闭加载框，这里设置为否（点击不关闭）
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DSP8.8BT V2',
      navigatorKey: navigatorKey,
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        // 设置全局 AppBar 主题
        appBarTheme: const AppBarTheme(
          backgroundColor: Color_theme, // AppBar 背景颜色
          titleTextStyle: TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold), // AppBar 标题文本颜色
        ),

        // 设置全局文本颜色
        textTheme: const TextTheme(
          bodySmall: TextStyle(color: Colors.white), // 小号文本颜色
          bodyMedium: TextStyle(color: Colors.white), // 中号文本颜色
          bodyLarge: TextStyle(color: Colors.white), // 大号文本颜色
        ),

        ///全局slider设置
        sliderTheme: SliderThemeData(
          trackHeight: 5,
          activeTrackColor: Color_active_slider, // 滑动过的颜色
          inactiveTrackColor: Colors.grey, // 未滑动部分的颜色
          // activeTrackColor: Colors.transparent, // 滑动过的颜色
          // inactiveTrackColor: Colors.transparent, // 未滑动部分的颜色
          thumbColor: Color_thumb_slider, // 滑块的颜色
          overlayColor: Color_thumb_slider.withOpacity(0.2), // 滑块按下时的颜色
          activeTickMarkColor: Colors.transparent, // 隐藏刻度线
          inactiveTickMarkColor: Colors.transparent, // 隐藏刻度线
          thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 8.0), // 自定义滑块的形状和大小
          overlayShape: const RoundSliderOverlayShape(overlayRadius: 10.0), // 设置圆点到两端的间距为 0 以减小间距
          trackShape: null,

          // thumbIcon: Image.asset('assets/slider_thumb.png'), // 自定义滑点图片
        ),

        ///全局switch设置
        switchTheme: SwitchThemeData(
          ///圆点颜色
          thumbColor: const WidgetStatePropertyAll(Colors.white),

          ///轨道不同状态下的颜色
          trackColor: WidgetStateProperty.resolveWith<Color>((states) {
            return states.contains(WidgetState.selected) ? Colors.green : Color_bg_btn;
          }),

          ///线条颜色
          trackOutlineColor: WidgetStateProperty.resolveWith<Color>((states) {
            return states.contains(WidgetState.selected) ? Colors.green : Color_bg_btn;
          }),

          ///点击圆点，高亮时的颜色
          overlayColor: const WidgetStatePropertyAll(Colors.transparent),
        ),

        /// 设置全局 BottomNavigationBar 主题
        bottomNavigationBarTheme: const BottomNavigationBarThemeData(
          backgroundColor: Colors.transparent, // BottomNavigationBar 背景颜色
        ),

        primaryColor: Color_bg_view, // 应用程序的主要颜色，用于大多数部件的背景颜色
        scaffoldBackgroundColor: Color_bg_view, // Scaffold 的背景颜色
        highlightColor: Colors.white10.withAlpha(30), // 按钮等组件点击时的高亮颜色
        splashColor: Colors.white10.withAlpha(15), // 点击时的水波纹颜色
        useMaterial3: true, // 启用 Material 3 设计规范
      ),
      home: const MyHomeController(),
      // home: LineChartSample(),
      // home: Center(
      //   child: CustomPaint(
      //     size: const Size(300, 200),
      //     painter: LineChartPainter(),
      //   ),
      // ),
      builder: EasyLoading.init(),
    );
  }
}
